/*
编写一个程序，接受用户输入的一个字符串，并输出该字符串中出现频率最高的字符。
*/
#include <stdio.h>
#include <string.h>

#define BUFFERSIZE 100
#define SIZE 256
#define BUFFERSIZEONE 26

static int chatExistTimes(const char *str, char ch)
{
    int count = 0;

    /* 静态不需要判空 */
    const char * tmpStr = str;
    while (*tmpStr != '\0')
    {
        if (*tmpStr == ch)
        {
            count++;
        }
        tmpStr++;
    }
    return count;
}

/* */
int strMostFreq02(const char *str, char * pValue)
{
    if (str == NULL || pValue== NULL)
    {
        return 0;
    }

    int buffer[BUFFERSIZEONE] = {0};

    const char * tmpStr = str;
    while (*tmpStr != '\0')
    {
        buffer[*tmpStr - 'a']++;
        tmpStr++;
    }

    /* 一遍遍历循环 */
    int maxCount = 0;
    for (int idx = 0; idx < BUFFERSIZEONE; idx++)
    {
        if (buffer[idx] > maxCount)
        {
            maxCount = buffer[idx];
            /* 解引用 */
            *pValue = idx + 'a';
        }
    }
    return maxCount;

}



char findMostFrequentChar(const char* inputString) 
{
    /* 用于统计每个字符在输入字符串中出现的次数 */
    int char_count[SIZE] = {0};
    /* 最大出现次数 */
    int count = 0;
    char mosFrequentChar;

    for (int idx = 0; idx < strlen(inputString); idx++) 
    {
        /* 
        对字符数组 char_count 中对应字符的计数加一 
        input_string[i] 表示当前遍历到的字符
        */
        char_count[(int)inputString[idx]]++;

        /* 如果当前字符的计数值大于之前记录的最大值： */
        if (char_count[(int)inputString[idx]] > count) 
        {
            /* 更新最大计数值为当前字符的计数值。 */
            count = char_count[(int)inputString[idx]];
            /* 更新出现频率最高的字符为当前字符。*/
            mosFrequentChar = inputString[idx];
        }
    }

    return mosFrequentChar;
}


int main()
{
    char inputString[BUFFERSIZE];
    int maxCount = 0;
    printf("请输入一个字符串：");
    scanf("%s", inputString);

    char result = findMostFrequentChar(inputString);
    printf("出现频率最高的字符是：%c\n", result);
    return 0;
}